#include "device_lamp.h"
#include "ui_device_lamp.h"

DeviceLamp::DeviceLamp(int room, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DeviceLamp)
{
    ui->setupUi(this);

    room_name = room; // 初始化房间编号

    // 创建并配置滑动按钮
    my_Slider_btn = new SliderButton(this);
    my_Slider_btn->set_button_color(QColor(36, 110, 202), QColor(188, 188, 188), QColor(255, 255, 255));
    my_Slider_btn->set_button_size(30, 40);
    my_Slider_btn->move(170, 15);

    // 设置背景样式
    this->setStyleSheet("#frame_background{background-color:rgba(244, 252, 255, 0.4);border-radius:50px}");
    // 初始化灯的关闭状态样式
    ui->label_lamp->setStyleSheet("border-image:url(:/image/吊灯-关.png)");
    ui->label_lamp->setText("");

    connect(my_Slider_btn, SIGNAL(signal_button_off()), this, SLOT(light_slider_OFF()));
    connect(my_Slider_btn, SIGNAL(signal_button_on()), this, SLOT(light_slider_ON()));

}

DeviceLamp::~DeviceLamp()
{
    delete ui; // 释放界面对象内存
}

/***********************************
 * 名称：light_slider_ON
 * 功能: 灯开关-开
 * 说明：当滑动按钮打开时触发，发送控制数据并更新界面状态为开启
 ***********************************/
void DeviceLamp::light_slider_ON(void)
{

    // 发送开启控制数据
    //    emit sig_sendData(g_socket_map.value(room_name), "<*06,100,01*>");
    emit update_background(true);
    emit log_message("灯开");

    // 更新界面显示为开启状态
    ui->label_lamp->setStyleSheet("border-image:url(:/image/吊灯-开.png)");
    ui->label_onoff->setStyleSheet("color:rgb(36,110,202)");
    ui->label_onoff->setText("ON");
}

/***********************************
 * 名称：light_slider_OFF
 * 功能: 灯开关-关
 * 说明：当滑动按钮关闭时触发，发送控制数据并更新界面状态为关闭
 ***********************************/
void DeviceLamp::light_slider_OFF(void)
{
    // 发送关闭控制数据
    //    emit sig_sendData(g_socket_map.value(room_name), "<*06,100,00*>");
    emit update_background(false);
    emit log_message("灯关");

    // 更新界面显示为关闭状态
    ui->label_lamp->setStyleSheet("border-image:url(:/image/吊灯-关.png)");
    ui->label_onoff->setStyleSheet("color:rgb(40,40,40)");
    ui->label_onoff->setText("OFF");
}

/***********************************
 * 名称：simulateMousePressLight
 * 功能: 模拟点击开关
 * 说明：用来语音控制，语音激活后模拟用户点击开关，考虑到标签隐藏问题，但是已经处理好了
 ***********************************/
void DeviceLamp::simulateMousePressLight() {

    if (!my_Slider_btn) {
        return;
    }

    // 创建一个模拟的鼠标事件
    QPoint globalPos = this->mapToGlobal(QPoint(0, 0)); // 将按钮的左上角映射到全局坐标系
    QPoint btnPos = my_Slider_btn->mapFromGlobal(globalPos); // 将全局坐标映射到按钮的局部坐标系
    QMouseEvent *pressEvent = new QMouseEvent(QEvent::MouseButtonPress,
                                              btnPos, // 鼠标事件发生的位置，相对于按钮
                                              Qt::LeftButton, // 鼠标按钮（左键）
                                              Qt::LeftButton, // 事件发生时的按钮状态
                                              Qt::NoModifier); // 事件发生时的修饰键

    // 发送事件给按钮的事件处理函数
    QApplication::sendEvent(my_Slider_btn, pressEvent);

    // 释放事件对象的内存
    delete pressEvent;
}
